{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import layers\n",
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv('./dataset/Tweets.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>tweet_id</th>\n",
       "      <th>airline_sentiment</th>\n",
       "      <th>airline_sentiment_confidence</th>\n",
       "      <th>negativereason</th>\n",
       "      <th>negativereason_confidence</th>\n",
       "      <th>airline</th>\n",
       "      <th>airline_sentiment_gold</th>\n",
       "      <th>name</th>\n",
       "      <th>negativereason_gold</th>\n",
       "      <th>retweet_count</th>\n",
       "      <th>text</th>\n",
       "      <th>tweet_coord</th>\n",
       "      <th>tweet_created</th>\n",
       "      <th>tweet_location</th>\n",
       "      <th>user_timezone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>570306133677760513</td>\n",
       "      <td>neutral</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Virgin America</td>\n",
       "      <td>NaN</td>\n",
       "      <td>cairdin</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>@VirginAmerica What @dhepburn said.</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-02-24 11:35:52 -0800</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Eastern Time (US &amp; Canada)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>570301130888122368</td>\n",
       "      <td>positive</td>\n",
       "      <td>0.3486</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>Virgin America</td>\n",
       "      <td>NaN</td>\n",
       "      <td>jnardino</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>@VirginAmerica plus you've added commercials t...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-02-24 11:15:59 -0800</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Pacific Time (US &amp; Canada)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>570301083672813571</td>\n",
       "      <td>neutral</td>\n",
       "      <td>0.6837</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Virgin America</td>\n",
       "      <td>NaN</td>\n",
       "      <td>yvonnalynn</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>@VirginAmerica I didn't today... Must mean I n...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-02-24 11:15:48 -0800</td>\n",
       "      <td>Lets Play</td>\n",
       "      <td>Central Time (US &amp; Canada)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>570301031407624196</td>\n",
       "      <td>negative</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>Bad Flight</td>\n",
       "      <td>0.7033</td>\n",
       "      <td>Virgin America</td>\n",
       "      <td>NaN</td>\n",
       "      <td>jnardino</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>@VirginAmerica it's really aggressive to blast...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-02-24 11:15:36 -0800</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Pacific Time (US &amp; Canada)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>570300817074462722</td>\n",
       "      <td>negative</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>Can't Tell</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>Virgin America</td>\n",
       "      <td>NaN</td>\n",
       "      <td>jnardino</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>@VirginAmerica and it's a really big bad thing...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-02-24 11:14:45 -0800</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Pacific Time (US &amp; Canada)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             tweet_id airline_sentiment  airline_sentiment_confidence  \\\n",
       "0  570306133677760513           neutral                        1.0000   \n",
       "1  570301130888122368          positive                        0.3486   \n",
       "2  570301083672813571           neutral                        0.6837   \n",
       "3  570301031407624196          negative                        1.0000   \n",
       "4  570300817074462722          negative                        1.0000   \n",
       "\n",
       "  negativereason  negativereason_confidence         airline  \\\n",
       "0            NaN                        NaN  Virgin America   \n",
       "1            NaN                     0.0000  Virgin America   \n",
       "2            NaN                        NaN  Virgin America   \n",
       "3     Bad Flight                     0.7033  Virgin America   \n",
       "4     Can't Tell                     1.0000  Virgin America   \n",
       "\n",
       "  airline_sentiment_gold        name negativereason_gold  retweet_count  \\\n",
       "0                    NaN     cairdin                 NaN              0   \n",
       "1                    NaN    jnardino                 NaN              0   \n",
       "2                    NaN  yvonnalynn                 NaN              0   \n",
       "3                    NaN    jnardino                 NaN              0   \n",
       "4                    NaN    jnardino                 NaN              0   \n",
       "\n",
       "                                                text tweet_coord  \\\n",
       "0                @VirginAmerica What @dhepburn said.         NaN   \n",
       "1  @VirginAmerica plus you've added commercials t...         NaN   \n",
       "2  @VirginAmerica I didn't today... Must mean I n...         NaN   \n",
       "3  @VirginAmerica it's really aggressive to blast...         NaN   \n",
       "4  @VirginAmerica and it's a really big bad thing...         NaN   \n",
       "\n",
       "               tweet_created tweet_location               user_timezone  \n",
       "0  2015-02-24 11:35:52 -0800            NaN  Eastern Time (US & Canada)  \n",
       "1  2015-02-24 11:15:59 -0800            NaN  Pacific Time (US & Canada)  \n",
       "2  2015-02-24 11:15:48 -0800      Lets Play  Central Time (US & Canada)  \n",
       "3  2015-02-24 11:15:36 -0800            NaN  Pacific Time (US & Canada)  \n",
       "4  2015-02-24 11:14:45 -0800            NaN  Pacific Time (US & Canada)  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = data[['airline_sentiment', 'text']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['neutral', 'positive', 'negative'], dtype=object)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.airline_sentiment.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "negative    9178\n",
       "neutral     3099\n",
       "positive    2363\n",
       "Name: airline_sentiment, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.airline_sentiment.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_p = data[data.airline_sentiment == 'positive']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_n = data[data.airline_sentiment == 'negative']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_n = data_n.iloc[:len(data_p)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2363, 2363)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data_n), len(data_p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.concat([data_n, data_p])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = data.sample(len(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['review'] = (data.airline_sentiment == 'positive').astype('int')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "del data['airline_sentiment']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "tf.keras.layers.Embedding  把文本向量化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "token = re.compile('[A-Za-z]+|[!?,.()]')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def reg_text(text):\n",
    "    new_text = token.findall(text)\n",
    "    new_text = [word.lower() for word in new_text]\n",
    "    return new_text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['text'] = data.text.apply(reg_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_set = set()\n",
    "for text in data.text:\n",
    "    for word in text:\n",
    "        word_set.add(word) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7101"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_word = len(word_set) + 1\n",
    "max_word"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_list = list(word_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2349"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "word_list.index('spending')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_index =  dict((word, word_list.index(word) + 1) for word in word_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'terribleservice': 1,\n",
       " 'so': 2,\n",
       " 'dewithpew': 3,\n",
       " 'hang': 4,\n",
       " 'mia': 5,\n",
       " 'strike': 6,\n",
       " 'sba': 7,\n",
       " 'yrs': 8,\n",
       " 'limits': 9,\n",
       " 'kindness': 10,\n",
       " 'diego': 11,\n",
       " 'nowhereland': 12,\n",
       " 'pofsxojsy': 13,\n",
       " 'happier': 14,\n",
       " 'trading': 15,\n",
       " 'nothing': 16,\n",
       " 'mortified': 17,\n",
       " 'dissatisfaction': 18,\n",
       " 'zrh': 19,\n",
       " 'jedediah': 20,\n",
       " 'shaquille': 21,\n",
       " 'lisa': 22,\n",
       " 'smallest': 23,\n",
       " 'southwestluv': 24,\n",
       " 'keepitmovin': 25,\n",
       " 'airborne': 26,\n",
       " 'danger': 27,\n",
       " 'vqtyza': 28,\n",
       " 'hurricane': 29,\n",
       " 'trvfncedl': 30,\n",
       " 'together': 31,\n",
       " 'year': 32,\n",
       " 'xxy': 33,\n",
       " 'toiletries': 34,\n",
       " 'thier': 35,\n",
       " 'experiencing': 36,\n",
       " 'freddie': 37,\n",
       " 'eliz': 38,\n",
       " 'something': 39,\n",
       " 'hour': 40,\n",
       " 'reading': 41,\n",
       " 'humor': 42,\n",
       " 'improper': 43,\n",
       " 'entertaining': 44,\n",
       " 'somewhat': 45,\n",
       " 'arrogant': 46,\n",
       " 'keambleam': 47,\n",
       " 'swaculture': 48,\n",
       " 'aweful': 49,\n",
       " 'unpredictable': 50,\n",
       " 'continue': 51,\n",
       " 'addressing': 52,\n",
       " 'mjkpgvxmpc': 53,\n",
       " 'cable': 54,\n",
       " 'frequent': 55,\n",
       " 'sincerely': 56,\n",
       " 'forgot': 57,\n",
       " 'dare': 58,\n",
       " 'awfulness': 59,\n",
       " 'ourguest': 60,\n",
       " 'many': 61,\n",
       " 'wth': 62,\n",
       " 'yr': 63,\n",
       " 'olavarria': 64,\n",
       " 'eco': 65,\n",
       " 'black': 66,\n",
       " 'fantastic': 67,\n",
       " 'counted': 68,\n",
       " 'induce': 69,\n",
       " 'cousins': 70,\n",
       " 'fixed': 71,\n",
       " 'maryjo': 72,\n",
       " 'downgraded': 73,\n",
       " 'inappropriately': 74,\n",
       " 'per': 75,\n",
       " 'irene': 76,\n",
       " 'legitimate': 77,\n",
       " 'wall': 78,\n",
       " 'boards': 79,\n",
       " 'nothappy': 80,\n",
       " 'timed': 81,\n",
       " 'looks': 82,\n",
       " 'ithica': 83,\n",
       " 'sbn': 84,\n",
       " 'joanna': 85,\n",
       " 'integrate': 86,\n",
       " 'airplane': 87,\n",
       " 'tlc': 88,\n",
       " 'lovesongfriday': 89,\n",
       " 'silly': 90,\n",
       " 'afraid': 91,\n",
       " 'familiar': 92,\n",
       " 'skycaps': 93,\n",
       " 'beautifull': 94,\n",
       " 'mark': 95,\n",
       " 'festivities': 96,\n",
       " 'hell': 97,\n",
       " 'collection': 98,\n",
       " 'tmadcle': 99,\n",
       " 'real': 100,\n",
       " 'partly': 101,\n",
       " 'savings': 102,\n",
       " 'notifying': 103,\n",
       " 'suprise': 104,\n",
       " 'transpired': 105,\n",
       " 'don': 106,\n",
       " 'cgwe': 107,\n",
       " 'anna': 108,\n",
       " 'also': 109,\n",
       " 'thus': 110,\n",
       " 'entered': 111,\n",
       " 'afternoon': 112,\n",
       " 'emb': 113,\n",
       " 'conversed': 114,\n",
       " 'accurate': 115,\n",
       " 'requirement': 116,\n",
       " 'aaron': 117,\n",
       " 'compensates': 118,\n",
       " 'quickly': 119,\n",
       " 'miserable': 120,\n",
       " 'robert': 121,\n",
       " 'site': 122,\n",
       " 'thought': 123,\n",
       " 'mike': 124,\n",
       " 'skywest': 125,\n",
       " 'supervisors': 126,\n",
       " 'hqez': 127,\n",
       " 'comment': 128,\n",
       " 'yeseniahernandez': 129,\n",
       " 'columbus': 130,\n",
       " 'reminds': 131,\n",
       " 'faceless': 132,\n",
       " 'yiwlhqhzgp': 133,\n",
       " 'visors': 134,\n",
       " 'sir': 135,\n",
       " 'paint': 136,\n",
       " 'tails': 137,\n",
       " 'avoided': 138,\n",
       " 'beautifully': 139,\n",
       " 'exiting': 140,\n",
       " 'welcome': 141,\n",
       " 'everything': 142,\n",
       " 'robthecameraman': 143,\n",
       " 'ath': 144,\n",
       " 'michele': 145,\n",
       " 'eta': 146,\n",
       " 'jose': 147,\n",
       " 'treats': 148,\n",
       " 'reputation': 149,\n",
       " 'katie': 150,\n",
       " 'desert': 151,\n",
       " 'vanished': 152,\n",
       " 'universalorl': 153,\n",
       " 'lednocdqee': 154,\n",
       " 'volunteers': 155,\n",
       " 'nope': 156,\n",
       " 'travellers': 157,\n",
       " 'fwa': 158,\n",
       " 'vallarta': 159,\n",
       " 'reset': 160,\n",
       " 'hime': 161,\n",
       " 'enough': 162,\n",
       " 'staff': 163,\n",
       " 'grk': 164,\n",
       " 'protected': 165,\n",
       " 'nearly': 166,\n",
       " 'bill': 167,\n",
       " 'sharing': 168,\n",
       " 'origin': 169,\n",
       " 'experiences': 170,\n",
       " 'eight': 171,\n",
       " 'zabsonre': 172,\n",
       " 'mikes': 173,\n",
       " 'zi': 174,\n",
       " 'smiles': 175,\n",
       " 'approach': 176,\n",
       " 'airbus': 177,\n",
       " 'arrive': 178,\n",
       " 'bouncer': 179,\n",
       " 'comped': 180,\n",
       " 'meh': 181,\n",
       " 'fingers': 182,\n",
       " 'eye': 183,\n",
       " 'costumer': 184,\n",
       " 'fantasy': 185,\n",
       " 'certainly': 186,\n",
       " 'potential': 187,\n",
       " 'anywhere': 188,\n",
       " 'dominick': 189,\n",
       " 'asset': 190,\n",
       " 'management': 191,\n",
       " 'properly': 192,\n",
       " 'overselling': 193,\n",
       " 'warning': 194,\n",
       " 'e': 195,\n",
       " 'decision': 196,\n",
       " 'apologize': 197,\n",
       " 'sxm': 198,\n",
       " 'worksnicely': 199,\n",
       " 'samantha': 200,\n",
       " 'refunding': 201,\n",
       " 'johnwayneair': 202,\n",
       " 'apparently': 203,\n",
       " 'spread': 204,\n",
       " 'cqmm': 205,\n",
       " 'czamkoff': 206,\n",
       " 'i': 207,\n",
       " 'walking': 208,\n",
       " 'prison': 209,\n",
       " 'transfers': 210,\n",
       " 'accuratetraveltimes': 211,\n",
       " 'continuous': 212,\n",
       " 'economic': 213,\n",
       " 'jjje': 214,\n",
       " 'gzb': 215,\n",
       " 'cb': 216,\n",
       " 'promised': 217,\n",
       " 'yours': 218,\n",
       " 'dts': 219,\n",
       " 'mysteriously': 220,\n",
       " 'musicians': 221,\n",
       " 'table': 222,\n",
       " 'enforce': 223,\n",
       " 'distress': 224,\n",
       " 'nuts': 225,\n",
       " 'cpap': 226,\n",
       " 'wakes': 227,\n",
       " 'obvious': 228,\n",
       " 'served': 229,\n",
       " 'lower': 230,\n",
       " 'pesky': 231,\n",
       " 'kate': 232,\n",
       " 'come': 233,\n",
       " 'policy': 234,\n",
       " 'australia': 235,\n",
       " 'thru': 236,\n",
       " 'mistakes': 237,\n",
       " 'safer': 238,\n",
       " 'southwestair': 239,\n",
       " 'bio': 240,\n",
       " 'mild': 241,\n",
       " 'separated': 242,\n",
       " 'paxex': 243,\n",
       " 'partnered': 244,\n",
       " 'xfinity': 245,\n",
       " 'fact': 246,\n",
       " 'peeps': 247,\n",
       " 'remorse': 248,\n",
       " 'consequence': 249,\n",
       " 'opening': 250,\n",
       " 'flightedflight': 251,\n",
       " 'golds': 252,\n",
       " 'takemeback': 253,\n",
       " 'ja': 254,\n",
       " 'notcool': 255,\n",
       " 'juan': 256,\n",
       " 'little': 257,\n",
       " 'buf': 258,\n",
       " 'retain': 259,\n",
       " 'rhkamx': 260,\n",
       " 'paytontaylor': 261,\n",
       " 'alynewton': 262,\n",
       " 'westagard': 263,\n",
       " 'loudly': 264,\n",
       " 'lft': 265,\n",
       " 'scqujbvsta': 266,\n",
       " 'hy': 267,\n",
       " 'becuz': 268,\n",
       " 'valentinesday': 269,\n",
       " 'misinformation': 270,\n",
       " 'request': 271,\n",
       " 'considerably': 272,\n",
       " 'assaulted': 273,\n",
       " 'fit': 274,\n",
       " 'sparkled': 275,\n",
       " 'flyerfriendly': 276,\n",
       " 'top': 277,\n",
       " 'scale': 278,\n",
       " 'smoothflight': 279,\n",
       " 'sell': 280,\n",
       " 'inspired': 281,\n",
       " 'showed': 282,\n",
       " 'gbiw': 283,\n",
       " 'transfer': 284,\n",
       " 'continues': 285,\n",
       " 'farecompare': 286,\n",
       " 'extremely': 287,\n",
       " 'dxux': 288,\n",
       " 'accrue': 289,\n",
       " 'nomorevirgin': 290,\n",
       " 'tire': 291,\n",
       " 'vftuyjh': 292,\n",
       " 'n': 293,\n",
       " 'inconvience': 294,\n",
       " 'replies': 295,\n",
       " 'shenanigans': 296,\n",
       " 'fairbanks': 297,\n",
       " 'conveniently': 298,\n",
       " 'fly': 299,\n",
       " 'goodcustomerservice': 300,\n",
       " 'allow': 301,\n",
       " 'read': 302,\n",
       " 'howisthatpossible': 303,\n",
       " 'adam': 304,\n",
       " 'lrfo': 305,\n",
       " 'kindly': 306,\n",
       " 'flyingwithus': 307,\n",
       " 'delta': 308,\n",
       " 'solo': 309,\n",
       " 'princess': 310,\n",
       " 'hr': 311,\n",
       " 'qf': 312,\n",
       " 'remember': 313,\n",
       " 'gopatriots': 314,\n",
       " 'replying': 315,\n",
       " 'bluetiful': 316,\n",
       " 'market': 317,\n",
       " 'unsafe': 318,\n",
       " 'ukdjjijrow': 319,\n",
       " 'tfanxbh': 320,\n",
       " 'ccicanine': 321,\n",
       " 'suggest': 322,\n",
       " 'headphones': 323,\n",
       " 'letter': 324,\n",
       " 'relayed': 325,\n",
       " 'funds': 326,\n",
       " 'camera': 327,\n",
       " 'blocked': 328,\n",
       " 'moodlighting': 329,\n",
       " 'coshared': 330,\n",
       " 'cfyhkvb': 331,\n",
       " 'mobay': 332,\n",
       " 'screen': 333,\n",
       " 'literate': 334,\n",
       " 'cyprhe': 335,\n",
       " 'roads': 336,\n",
       " 'foot': 337,\n",
       " 'holiday': 338,\n",
       " 'ahold': 339,\n",
       " 'worstservice': 340,\n",
       " 'motherpollock': 341,\n",
       " 'qc': 342,\n",
       " 'staffed': 343,\n",
       " 'define': 344,\n",
       " 'xelbon': 345,\n",
       " 'gorgeous': 346,\n",
       " 'loads': 347,\n",
       " 'shoe': 348,\n",
       " 'logging': 349,\n",
       " 'gkgkzlawpr': 350,\n",
       " 'major': 351,\n",
       " 'trying': 352,\n",
       " 'wasappreciated': 353,\n",
       " 'reported': 354,\n",
       " 'chatted': 355,\n",
       " 'shift': 356,\n",
       " 'dramatically': 357,\n",
       " 'piela': 358,\n",
       " 'characterize': 359,\n",
       " 'fianc': 360,\n",
       " 'earn': 361,\n",
       " 'rdu': 362,\n",
       " 'gotcha': 363,\n",
       " 'confrontational': 364,\n",
       " 'advise': 365,\n",
       " 'weaktea': 366,\n",
       " 'method': 367,\n",
       " 'sprinting': 368,\n",
       " 'tbsjquw': 369,\n",
       " 'volkswagen': 370,\n",
       " 'cont': 371,\n",
       " 'insulting': 372,\n",
       " 'coupons': 373,\n",
       " 'barely': 374,\n",
       " 'def': 375,\n",
       " 'oardjjgrrd': 376,\n",
       " 'redsox': 377,\n",
       " 'mb': 378,\n",
       " 'though': 379,\n",
       " 'usd': 380,\n",
       " 'admiral': 381,\n",
       " 'wasn': 382,\n",
       " 'disputed': 383,\n",
       " 'scott': 384,\n",
       " 'after': 385,\n",
       " 'impress': 386,\n",
       " 'keepingit': 387,\n",
       " 'speedy': 388,\n",
       " 'senses': 389,\n",
       " 'ny': 390,\n",
       " 'shv': 391,\n",
       " 'human': 392,\n",
       " 'birder': 393,\n",
       " 'registration': 394,\n",
       " 'tour': 395,\n",
       " 'unitedairlinessucks': 396,\n",
       " 'roanoke': 397,\n",
       " 'exact': 398,\n",
       " 'technical': 399,\n",
       " 'medal': 400,\n",
       " 'entertainmnt': 401,\n",
       " 'flights': 402,\n",
       " 'usairways': 403,\n",
       " 'hardly': 404,\n",
       " 'yet': 405,\n",
       " 'wtfodds': 406,\n",
       " 'accepted': 407,\n",
       " 'lufthansa': 408,\n",
       " 'feb': 409,\n",
       " 'moon': 410,\n",
       " 'christinebpc': 411,\n",
       " 'nfl': 412,\n",
       " 'appease': 413,\n",
       " 'uncomfortable': 414,\n",
       " 'traveller': 415,\n",
       " 'aerojobmarket': 416,\n",
       " 'interior': 417,\n",
       " 'kerry': 418,\n",
       " 'jurassic': 419,\n",
       " 'routes': 420,\n",
       " 'usually': 421,\n",
       " 'fleek': 422,\n",
       " 'msg': 423,\n",
       " 'foreign': 424,\n",
       " 'crew': 425,\n",
       " 'onelove': 426,\n",
       " 'locations': 427,\n",
       " 'kf': 428,\n",
       " 'worthless': 429,\n",
       " 'engineer': 430,\n",
       " 'thanksunited': 431,\n",
       " 'iphone': 432,\n",
       " 'coffee': 433,\n",
       " 'organization': 434,\n",
       " 'irresponsible': 435,\n",
       " 'lacking': 436,\n",
       " 'peace': 437,\n",
       " 'owed': 438,\n",
       " 'moderate': 439,\n",
       " 'frequentflyer': 440,\n",
       " 'cheap': 441,\n",
       " 'fuck': 442,\n",
       " 'xhlc': 443,\n",
       " 'lesson': 444,\n",
       " 'partners': 445,\n",
       " 'tory': 446,\n",
       " 'huh': 447,\n",
       " 'fedup': 448,\n",
       " 'oktukjy': 449,\n",
       " 'john': 450,\n",
       " 'actively': 451,\n",
       " '(': 452,\n",
       " 'jokesonus': 453,\n",
       " 'victim': 454,\n",
       " 'overbooked': 455,\n",
       " 'oma': 456,\n",
       " 'inquired': 457,\n",
       " 'humour': 458,\n",
       " 'continentalairlines': 459,\n",
       " 'repeated': 460,\n",
       " 'superstars': 461,\n",
       " 'rudest': 462,\n",
       " 'another': 463,\n",
       " 'instructed': 464,\n",
       " 'flow': 465,\n",
       " 'yxe': 466,\n",
       " 'low': 467,\n",
       " 'harsh': 468,\n",
       " 'cancelled': 469,\n",
       " 'avail': 470,\n",
       " 'roam': 471,\n",
       " 'taylor': 472,\n",
       " 'norris': 473,\n",
       " 'scanned': 474,\n",
       " 'affects': 475,\n",
       " 'disruption': 476,\n",
       " 'personnel': 477,\n",
       " 'lying': 478,\n",
       " 'secured': 479,\n",
       " 'hanging': 480,\n",
       " 'qjzapkx': 481,\n",
       " 'shouldn': 482,\n",
       " 'skin': 483,\n",
       " 'slew': 484,\n",
       " 'falls': 485,\n",
       " 'bless': 486,\n",
       " 'film': 487,\n",
       " 'xkiy': 488,\n",
       " 'these': 489,\n",
       " 'd': 490,\n",
       " 'mdw': 491,\n",
       " 'unwind': 492,\n",
       " 'pm': 493,\n",
       " 'freakin': 494,\n",
       " 'time': 495,\n",
       " 'sigh': 496,\n",
       " 'overall': 497,\n",
       " 'divert': 498,\n",
       " 'gcwvfuopl': 499,\n",
       " 'listen': 500,\n",
       " 'rate': 501,\n",
       " 'free': 502,\n",
       " 'mrfbjtepef': 503,\n",
       " 'apologized': 504,\n",
       " 'invitational': 505,\n",
       " 'redwineisbetter': 506,\n",
       " 'america': 507,\n",
       " 'flew': 508,\n",
       " 'espinosa': 509,\n",
       " 'wed': 510,\n",
       " 'mentioning': 511,\n",
       " 'carry': 512,\n",
       " 'duecto': 513,\n",
       " 'below': 514,\n",
       " 'steered': 515,\n",
       " 'qdw': 516,\n",
       " 'films': 517,\n",
       " 'disappears': 518,\n",
       " 'jfk': 519,\n",
       " 'iyhi': 520,\n",
       " 'fun': 521,\n",
       " 'spent': 522,\n",
       " 'riedel': 523,\n",
       " 'anxiety': 524,\n",
       " 'mates': 525,\n",
       " 'nsusfsbpv': 526,\n",
       " 'transpacific': 527,\n",
       " 'lfw': 528,\n",
       " 'exicted': 529,\n",
       " 'face': 530,\n",
       " 'giant': 531,\n",
       " 'itsthelittlethings': 532,\n",
       " 'condition': 533,\n",
       " 'pia': 534,\n",
       " 'without': 535,\n",
       " 'cyd': 536,\n",
       " 'loyal': 537,\n",
       " 'likingyoulessandless': 538,\n",
       " 'donna': 539,\n",
       " 'conveyer': 540,\n",
       " 'donkey': 541,\n",
       " 'schedule': 542,\n",
       " 'accept': 543,\n",
       " 'kbkx': 544,\n",
       " 'contain': 545,\n",
       " 'alison': 546,\n",
       " 'pls': 547,\n",
       " 'ya': 548,\n",
       " 'alb': 549,\n",
       " 'using': 550,\n",
       " 'sardine': 551,\n",
       " 'cement': 552,\n",
       " 'az': 553,\n",
       " 'mechanics': 554,\n",
       " 'connects': 555,\n",
       " 'expensive': 556,\n",
       " 'salvaged': 557,\n",
       " 'andrewbiga': 558,\n",
       " 'restrm': 559,\n",
       " 'sav': 560,\n",
       " 'tryna': 561,\n",
       " 'cxp': 562,\n",
       " 'goodflight': 563,\n",
       " 'cabo': 564,\n",
       " 'trick': 565,\n",
       " 'hisc': 566,\n",
       " 'luvagent': 567,\n",
       " 'meetthefleet': 568,\n",
       " 'refunded': 569,\n",
       " 'lol': 570,\n",
       " 'hugely': 571,\n",
       " 'starbucks': 572,\n",
       " 'sytycd': 573,\n",
       " 'despise': 574,\n",
       " 'nwk': 575,\n",
       " 'anyone': 576,\n",
       " 'sheila': 577,\n",
       " 'advisory': 578,\n",
       " 'responsibility': 579,\n",
       " 'yvonne': 580,\n",
       " 'blatantly': 581,\n",
       " 'responsible': 582,\n",
       " 'attentiveness': 583,\n",
       " 'burley': 584,\n",
       " 'exclusively': 585,\n",
       " 'unitedairlinessux': 586,\n",
       " 'finally': 587,\n",
       " 'del': 588,\n",
       " 'dnx': 589,\n",
       " 'suit': 590,\n",
       " 'sock': 591,\n",
       " 'guys': 592,\n",
       " 'gaga': 593,\n",
       " 'selling': 594,\n",
       " 'friendlyteam': 595,\n",
       " 'fwiw': 596,\n",
       " 'explaining': 597,\n",
       " 'scl': 598,\n",
       " 'pqms': 599,\n",
       " 'hare': 600,\n",
       " 'lrw': 601,\n",
       " 'airnzusa': 602,\n",
       " 'forward': 603,\n",
       " 'said': 604,\n",
       " 'toilets': 605,\n",
       " 'spots': 606,\n",
       " 'sourhwest': 607,\n",
       " 'farelock': 608,\n",
       " 'ewj': 609,\n",
       " 'regains': 610,\n",
       " 'coupon': 611,\n",
       " 'threehourslate': 612,\n",
       " 'robertdwyer': 613,\n",
       " 'min': 614,\n",
       " 'amazingflightcrew': 615,\n",
       " 'assured': 616,\n",
       " 'spite': 617,\n",
       " 'race': 618,\n",
       " 'voucher': 619,\n",
       " 'hotelstonight': 620,\n",
       " 'gladly': 621,\n",
       " 'break': 622,\n",
       " 'confirmed': 623,\n",
       " 'defend': 624,\n",
       " 'foxnews': 625,\n",
       " 'threw': 626,\n",
       " 'representative': 627,\n",
       " 'ferrissalameh': 628,\n",
       " 'woke': 629,\n",
       " 'bin': 630,\n",
       " 'options': 631,\n",
       " 'coast': 632,\n",
       " 'chinese': 633,\n",
       " 'sn': 634,\n",
       " 'seg': 635,\n",
       " 'crashes': 636,\n",
       " 'refresh': 637,\n",
       " 'sooner': 638,\n",
       " 'tkx': 639,\n",
       " 'snowy': 640,\n",
       " 'daysofunitedfailures': 641,\n",
       " 'recourse': 642,\n",
       " 'global': 643,\n",
       " 'doing': 644,\n",
       " 'realize': 645,\n",
       " 'honeymoon': 646,\n",
       " 'tfjfmsha': 647,\n",
       " 'mojave': 648,\n",
       " 'pvphmtzc': 649,\n",
       " 'lavatory': 650,\n",
       " 'eyes': 651,\n",
       " 'negligent': 652,\n",
       " 'know': 653,\n",
       " 'makes': 654,\n",
       " 'bonnie': 655,\n",
       " 'dplq': 656,\n",
       " 'yeehaw': 657,\n",
       " 'truck': 658,\n",
       " 'jason': 659,\n",
       " 'noticed': 660,\n",
       " 'things': 661,\n",
       " 'zaoay': 662,\n",
       " 'words': 663,\n",
       " 'carrier': 664,\n",
       " 'inexcusable': 665,\n",
       " 'beverage': 666,\n",
       " 'waived': 667,\n",
       " 'lme': 668,\n",
       " 'refuel': 669,\n",
       " 'lhrdfw': 670,\n",
       " 'cbv': 671,\n",
       " 'laurieameacham': 672,\n",
       " 'ycflalxv': 673,\n",
       " 'oq': 674,\n",
       " 'nye': 675,\n",
       " 'lifeline': 676,\n",
       " 'wantmymoneyback': 677,\n",
       " 'advice': 678,\n",
       " 'orthodoc': 679,\n",
       " 'stated': 680,\n",
       " 'bmc': 681,\n",
       " 'guiltypleasures': 682,\n",
       " 'whatstatus': 683,\n",
       " 'gfc': 684,\n",
       " 'heyyyy': 685,\n",
       " 'terminal': 686,\n",
       " 'refreshes': 687,\n",
       " 'southwestluvsweeps': 688,\n",
       " 'aircanada': 689,\n",
       " 'investigated': 690,\n",
       " 'aiyc': 691,\n",
       " 'bizarre': 692,\n",
       " 'pr': 693,\n",
       " 'preboarding': 694,\n",
       " 'netneutrality': 695,\n",
       " 'uno': 696,\n",
       " 'lucycat': 697,\n",
       " 'vhp': 698,\n",
       " 'aa': 699,\n",
       " 'opinion': 700,\n",
       " 'nonsense': 701,\n",
       " 'consistency': 702,\n",
       " 'various': 703,\n",
       " 'push': 704,\n",
       " 'questions': 705,\n",
       " 'eastern': 706,\n",
       " 'waking': 707,\n",
       " 'channels': 708,\n",
       " 'auto': 709,\n",
       " 'fliers': 710,\n",
       " 'air': 711,\n",
       " 'mouse': 712,\n",
       " 'enoughisenough': 713,\n",
       " 'cookies': 714,\n",
       " 'peculiar': 715,\n",
       " 'hnl': 716,\n",
       " 'inconvenience': 717,\n",
       " 'personalized': 718,\n",
       " 'grow': 719,\n",
       " 'chn': 720,\n",
       " 'luvsw': 721,\n",
       " 'prevented': 722,\n",
       " 'hurry': 723,\n",
       " 'direct': 724,\n",
       " 'volume': 725,\n",
       " 'courteous': 726,\n",
       " 'led': 727,\n",
       " 'naelah': 728,\n",
       " 'hollow': 729,\n",
       " 'mt': 730,\n",
       " 'belongings': 731,\n",
       " 'portlandjetport': 732,\n",
       " 'sosmart': 733,\n",
       " 'kelly': 734,\n",
       " 'lucia': 735,\n",
       " 'zut': 736,\n",
       " 'thanku': 737,\n",
       " 'ticket': 738,\n",
       " 'americanisbetter': 739,\n",
       " 'localized': 740,\n",
       " 'terra': 741,\n",
       " 'fra': 742,\n",
       " 'national': 743,\n",
       " 'strategy': 744,\n",
       " 'scream': 745,\n",
       " 'and': 746,\n",
       " 'causing': 747,\n",
       " 'thanking': 748,\n",
       " 'incls': 749,\n",
       " 'myself': 750,\n",
       " 'logs': 751,\n",
       " 'blue': 752,\n",
       " 'sits': 753,\n",
       " 'omg': 754,\n",
       " 'doctors': 755,\n",
       " 'flightlations': 756,\n",
       " 'emaleesugano': 757,\n",
       " 'breakup': 758,\n",
       " 'jvdf': 759,\n",
       " 'jetway': 760,\n",
       " 'wont': 761,\n",
       " 'reasons': 762,\n",
       " 'smf': 763,\n",
       " 'pj': 764,\n",
       " 'existing': 765,\n",
       " 'gottogetbetter': 766,\n",
       " 'promising': 767,\n",
       " 'wasting': 768,\n",
       " 'unimpressed': 769,\n",
       " 'nah': 770,\n",
       " 'bh': 771,\n",
       " 'hut': 772,\n",
       " 'claudia': 773,\n",
       " 'cmh': 774,\n",
       " 'entitled': 775,\n",
       " 'missed': 776,\n",
       " 'seattle': 777,\n",
       " 'bobwesson': 778,\n",
       " 'jump': 779,\n",
       " 'lon': 780,\n",
       " 'international': 781,\n",
       " 'streetwise': 782,\n",
       " 'standbys': 783,\n",
       " 'sdylukr': 784,\n",
       " 'bait': 785,\n",
       " 'selfies': 786,\n",
       " 'adjacent': 787,\n",
       " 'inspiring': 788,\n",
       " 'spends': 789,\n",
       " 'main': 790,\n",
       " 'deserved': 791,\n",
       " 'sons': 792,\n",
       " 'an': 793,\n",
       " 'plain': 794,\n",
       " 'sheesh': 795,\n",
       " 'eyw': 796,\n",
       " 'bridesmaid': 797,\n",
       " 'abysmal': 798,\n",
       " 'passenger': 799,\n",
       " 'respects': 800,\n",
       " 'la': 801,\n",
       " 'xmas': 802,\n",
       " 'nf': 803,\n",
       " 'affiliate': 804,\n",
       " 'department': 805,\n",
       " 'they': 806,\n",
       " 'claiming': 807,\n",
       " 'tlpbaupik': 808,\n",
       " 'turrible': 809,\n",
       " 'wheel': 810,\n",
       " 'winter': 811,\n",
       " 'inbound': 812,\n",
       " 'atlantic': 813,\n",
       " 'besides': 814,\n",
       " 'see': 815,\n",
       " 'gave': 816,\n",
       " 'galley': 817,\n",
       " 'representatives': 818,\n",
       " 'ef': 819,\n",
       " 'learn': 820,\n",
       " 'satisfactory': 821,\n",
       " 'perceived': 822,\n",
       " 'illegal': 823,\n",
       " 'recruiter': 824,\n",
       " 'handlers': 825,\n",
       " 'turbulence': 826,\n",
       " 'pgashow': 827,\n",
       " 'dos': 828,\n",
       " 'fitz': 829,\n",
       " 'example': 830,\n",
       " 'aww': 831,\n",
       " 'kdhruf': 832,\n",
       " 'welcomed': 833,\n",
       " 'utah': 834,\n",
       " 'surprisingly': 835,\n",
       " 'tv': 836,\n",
       " 'interest': 837,\n",
       " 'thick': 838,\n",
       " 'state': 839,\n",
       " 'bevies': 840,\n",
       " 'precioustime': 841,\n",
       " 'ripoffs': 842,\n",
       " 'incubator': 843,\n",
       " 'seanmfmadden': 844,\n",
       " 'carpet': 845,\n",
       " 'vf': 846,\n",
       " '!': 847,\n",
       " 'cheer': 848,\n",
       " 'royal': 849,\n",
       " 'events': 850,\n",
       " 'robbogart': 851,\n",
       " 'cgjase': 852,\n",
       " 'condolences': 853,\n",
       " 'operated': 854,\n",
       " 'eventually': 855,\n",
       " 'serious': 856,\n",
       " 'killeen': 857,\n",
       " 'wet': 858,\n",
       " 'feelingtheluv': 859,\n",
       " 'refreshing': 860,\n",
       " 'cases': 861,\n",
       " 'movement': 862,\n",
       " 'hasn': 863,\n",
       " 'hung': 864,\n",
       " 'mci': 865,\n",
       " 'water': 866,\n",
       " 'field': 867,\n",
       " 'cheers': 868,\n",
       " 'understands': 869,\n",
       " 'unsmiling': 870,\n",
       " 'pending': 871,\n",
       " 'applepay': 872,\n",
       " 'myvxexperience': 873,\n",
       " 'locals': 874,\n",
       " 'lghpcdu': 875,\n",
       " 'relief': 876,\n",
       " 'stclass': 877,\n",
       " 'designated': 878,\n",
       " 'happytweet': 879,\n",
       " 'upinairclaire': 880,\n",
       " 'jobs': 881,\n",
       " 'decline': 882,\n",
       " 'announcements': 883,\n",
       " 'threat': 884,\n",
       " 'cleared': 885,\n",
       " 'stays': 886,\n",
       " 'boarded': 887,\n",
       " 'hotels': 888,\n",
       " 'ute': 889,\n",
       " 'premium': 890,\n",
       " 'labyrinth': 891,\n",
       " 'reimbursement': 892,\n",
       " 'imagine': 893,\n",
       " 'robotic': 894,\n",
       " 'covering': 895,\n",
       " 'usa': 896,\n",
       " 'gmail': 897,\n",
       " 'crucial': 898,\n",
       " 'moneynotspentonunited': 899,\n",
       " 'iadore': 900,\n",
       " 'aateam': 901,\n",
       " 'americanforlife': 902,\n",
       " 'active': 903,\n",
       " 'monday': 904,\n",
       " 'skiing': 905,\n",
       " 'raleigh': 906,\n",
       " 'veterans': 907,\n",
       " 'pasengers': 908,\n",
       " 'amaze': 909,\n",
       " 'bc': 910,\n",
       " 'monitoring': 911,\n",
       " 'today': 912,\n",
       " 'reimburse': 913,\n",
       " 'tiredandwanttogohome': 914,\n",
       " 'pays': 915,\n",
       " 'jcd': 916,\n",
       " 'wreck': 917,\n",
       " 'wong': 918,\n",
       " 'money': 919,\n",
       " 'jerk': 920,\n",
       " 'scramble': 921,\n",
       " 'magic': 922,\n",
       " 'mosaicmecrazy': 923,\n",
       " 'dm': 924,\n",
       " 'margo': 925,\n",
       " 'hand': 926,\n",
       " 'airfares': 927,\n",
       " 'broke': 928,\n",
       " 'connected': 929,\n",
       " 'lookforwardtoflywithaa': 930,\n",
       " 'notice': 931,\n",
       " 'history': 932,\n",
       " 'responses': 933,\n",
       " 'condescending': 934,\n",
       " 'overflight': 935,\n",
       " 'google': 936,\n",
       " 'carrying': 937,\n",
       " 'gf': 938,\n",
       " 'customerservicefail': 939,\n",
       " 'secure': 940,\n",
       " 'ohk': 941,\n",
       " 'bookable': 942,\n",
       " 'emerg': 943,\n",
       " 'duped': 944,\n",
       " 'resolution': 945,\n",
       " 'life': 946,\n",
       " 'waive': 947,\n",
       " 'fall': 948,\n",
       " 'purely': 949,\n",
       " 'finding': 950,\n",
       " 'taking': 951,\n",
       " 'keeping': 952,\n",
       " 'literally': 953,\n",
       " 'connectns': 954,\n",
       " 'school': 955,\n",
       " 'expire': 956,\n",
       " 'speeds': 957,\n",
       " 'bked': 958,\n",
       " 'rep': 959,\n",
       " 'aviv': 960,\n",
       " 'elbows': 961,\n",
       " 'oz': 962,\n",
       " 'slapintheface': 963,\n",
       " 'thx': 964,\n",
       " 'hands': 965,\n",
       " 'beer': 966,\n",
       " 'entertainment': 967,\n",
       " 'mech': 968,\n",
       " 'passes': 969,\n",
       " 'bjwgoap': 970,\n",
       " 'lga': 971,\n",
       " 'feeling': 972,\n",
       " 'accompaniments': 973,\n",
       " 'luv': 974,\n",
       " 'hahahahaha': 975,\n",
       " 'leaves': 976,\n",
       " 'checkin': 977,\n",
       " 'ue': 978,\n",
       " 'stellar': 979,\n",
       " 'switch': 980,\n",
       " 'passengers': 981,\n",
       " 'delacy': 982,\n",
       " 'mac': 983,\n",
       " 'vtqe': 984,\n",
       " 'reschedule': 985,\n",
       " 'smoooothest': 986,\n",
       " 'allegiantair': 987,\n",
       " 'liars': 988,\n",
       " 'prove': 989,\n",
       " 'kristy': 990,\n",
       " 'distances': 991,\n",
       " 'notifications': 992,\n",
       " 'beatstheothers': 993,\n",
       " 'repeat': 994,\n",
       " 'floors': 995,\n",
       " 'cantlogoutofunitedwifi': 996,\n",
       " 'att': 997,\n",
       " 'ubotmr': 998,\n",
       " 'kj': 999,\n",
       " 'understaffed': 1000,\n",
       " ...}"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "word_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_ok = data.text.apply(lambda x: [word_index.get(word, 0) for word in x])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data_ok.iloc[2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "maxlen = max(len(x) for x in data_ok)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "maxlen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_ok = keras.preprocessing.sequence.pad_sequences(data_ok.values, maxlen=maxlen)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4726, 40)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_ok.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 0, ..., 0, 0, 0])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.review.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.Sequential()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Embeding : 把文本映射为一个密集向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.add(layers.Embedding(max_word, 50, input_length=maxlen))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.add(layers.LSTM(64))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.add(layers.Dense(1, activation='sigmoid'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding (Embedding)        (None, 40, 50)            355050    \n",
      "_________________________________________________________________\n",
      "lstm (LSTM)                  (None, 64)                29440     \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 1)                 65        \n",
      "=================================================================\n",
      "Total params: 384,555\n",
      "Trainable params: 384,555\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.compile(optimizer='adam',\n",
    "              loss='binary_crossentropy',\n",
    "              metrics=['acc']\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\guanghua\\anaconda3\\envs\\tensor\\lib\\site-packages\\tensorflow\\python\\ops\\gradients_impl.py:112: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
      "  \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 3780 samples, validate on 946 samples\n",
      "Epoch 1/10\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.6444 - acc: 0.6175 - val_loss: 0.5261 - val_acc: 0.7558\n",
      "Epoch 2/10\n",
      "3780/3780 [==============================] - 2s 634us/step - loss: 0.3917 - acc: 0.8280 - val_loss: 0.2234 - val_acc: 0.9154\n",
      "Epoch 3/10\n",
      "3780/3780 [==============================] - 2s 619us/step - loss: 0.1677 - acc: 0.9437 - val_loss: 0.2062 - val_acc: 0.9207\n",
      "Epoch 4/10\n",
      "3780/3780 [==============================] - 2s 618us/step - loss: 0.1070 - acc: 0.9661 - val_loss: 0.2118 - val_acc: 0.9292\n",
      "Epoch 5/10\n",
      "3780/3780 [==============================] - 2s 614us/step - loss: 0.0701 - acc: 0.9791 - val_loss: 0.2139 - val_acc: 0.9323\n",
      "Epoch 6/10\n",
      "3780/3780 [==============================] - 2s 614us/step - loss: 0.0416 - acc: 0.9899 - val_loss: 0.2848 - val_acc: 0.9249\n",
      "Epoch 7/10\n",
      "3780/3780 [==============================] - 2s 616us/step - loss: 0.0584 - acc: 0.9836 - val_loss: 0.3165 - val_acc: 0.9186\n",
      "Epoch 8/10\n",
      "3780/3780 [==============================] - 2s 610us/step - loss: 0.0336 - acc: 0.9918 - val_loss: 0.2829 - val_acc: 0.9218\n",
      "Epoch 9/10\n",
      "3780/3780 [==============================] - 2s 621us/step - loss: 0.0240 - acc: 0.9955 - val_loss: 0.2727 - val_acc: 0.9228\n",
      "Epoch 10/10\n",
      "3780/3780 [==============================] - 2s 618us/step - loss: 0.0186 - acc: 0.9950 - val_loss: 0.3322 - val_acc: 0.9249\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(data_ok, data.review.values, epochs=10, batch_size=128, validation_split=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x297176c1208>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD8CAYAAACb4nSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xt8FPW9//HXh2tELnKtSIBEDyoXQTTi7deKooi2glproeqh6oF6jtpK29OqterBeuzpsadXC6RqvbSK1JYmWtRixUsrWII3CogiqERUgtwRJQmf3x/fjdncyIbMZpLd9/PxmMfuzs5897srvmfynZnPmLsjIiLZoV3cHRARkZaj0BcRySIKfRGRLKLQFxHJIgp9EZEsotAXEckiCn0RkSyi0BcRySIKfRGRLNIh7g7U1qdPH8/Ly4u7GyIibcqyZcs2uXvfxpZrdaGfl5dHSUlJ3N0QEWlTzOztVJbT8I6ISBZR6IuIZJFGQ9/M7jazjWb2zwbeNzP7uZmtMbNXzeyYpPemmtkbiWlqlB0XEZGmS2VM/x7gl8B9Dbx/FjAkMR0PzAKON7NewE1AAeDAMjMrdvctTe1keXk5paWlfPzxx01dNSvk5OSQm5tLx44d4+6KiLRyjYa+uz9rZnn7WGQScJ+HwvxLzOwgM+sPjAUWuvtmADNbCEwAHmxqJ0tLS+nWrRt5eXmYWVNXz2juzocffkhpaSn5+flxd0dEWrkoxvQHAOuTXpcm5jU0v8k+/vhjevfurcCvh5nRu3dv/RUkIimJIvTrS2Lfx/y6DZhNN7MSMyspKyur/0MU+A3SbyMiqYriPP1SYGDS61xgQ2L+2Frzn66vAXcvBAoBCgoKdP9GEYlMRQVs3w7btlU/1n6+eze0a1c9tW9f83V9UzqW6d4dRo5M7+8RRegXA1eZ2VzCgdxt7v6emT0B/LeZ9UwsNx64LoLPE5Es4B7CuKGg3leIJz//6KO4v0nqjj8elixJ72c0Gvpm9iBhj72PmZUSzsjpCODus4EFwNnAGuAj4NLEe5vN7BZgaaKpmVUHdbNB165d2blzZ9zdEGk13KGsDN56K0zr1kFpKWzd2nBoV1Q03m7XrtCjR9hL7tEDevaEwYPD8+T5yc9rz8vJqe7j3r1QWRke9zU1tsz+tNGtWzr/CwSpnL0zpZH3HbiygffuBu7ev66JZIYtW2DFijC99hp06gT9+9edunaNu6fN4x6+a1Wg1/dYe6/7oINCSFcF8MCBMGJEw2Fd+3m3bmF4JCpmYZilQ6srUBOdtvfVrrkGXn452jaPPhp++tN9LvLd736XwYMH8x//8R8A3HzzzZgZzz77LFu2bKG8vJwf/OAHTJo0qdGP27lzJ5MmTap3vfvuu4/bb78dM2PkyJHcf//9fPDBB1xxxRWsXbsWgFmzZnHSSSc180tL1LZurQ73qmnlSnjvveplunQJe6979tRdv1u3+jcGhxxS83WPHiGc4rB9e90gT36+fXvN5Q86CPLy4Igj4MwzIT8/vM7PD3vjLbFnKzW1vdCPyeTJk7nmmms+Df158+bx+OOPM2PGDLp3786mTZs44YQTmDhxYqNn0+Tk5DB//vw6661cuZJbb72Vv//97/Tp04fNm8No2Ne//nVOOeUU5s+fT2VlpYaNYrZtWwjz2gG/YUP1Ml26wLBhMH48DB9ePQ0cGAJ78+awMaiaNmyo+Xrp0vBY33h0Tk7DG4TkqXfvsNfaFLt21Q3y5McttS6t7Nq1OshPOaVmqOflhdCX1qXthX4je+TpMnr0aDZu3MiGDRsoKyujZ8+e9O/fnxkzZvDss8/Srl073n33XT744AMOPvjgfbbl7lx//fV11nvqqae44IIL6NOnDwC9evUC4KmnnuK++8IF0e3bt6dHjx7p/bIChL3W2uG+cmUYh65ywAEh3E8/PYT6sGHhcfDgfQdu795hGjGi4WXcYceO+jcKVdM//wkLF4YNUW0dO8LBB9e/QejTBz74oO7eeu0zpg84IIR3Xh6ccELNQM/Ph1694vurQ/ZP2wv9GF1wwQU8/PDDvP/++0yePJnf/e53lJWVsWzZMjp27EheXl5KF0k1tJ6765z7GOzcWf+e+/qkSwtzcmDoUBg7tuaee15e0/emU2UWxq+7dw/DI/vy0Uf1bxSqprVr4W9/gw8/rLlep05hA5WfD+edVx3oVaHer59CPdMo9Jtg8uTJTJs2jU2bNvHMM88wb948+vXrR8eOHVm0aBFvv51SOWu2bdtW73rjxo3jvPPOY8aMGfTu3ZvNmzfTq1cvxo0bx6xZs7jmmmuorKxk165ddO/ePZ1fNSPt2lX/nnvyf7bOneHII+Gzn60Z7vn50R4wjFqXLnDYYWHalz174P33YdMm+Mxnwl5/ujZa0jop9Jtg+PDh7NixgwEDBtC/f38uuugizjnnHAoKCjj66KM58sgjU2qnofWGDx/O9773PU455RTat2/P6NGjueeee/jZz37G9OnTueuuu2jfvj2zZs3ixBNPTOdXbfO2boUXX4SSEli2LExvvln9fqdOIdxPOgmmTasO90MPbd3h3lydOsGgQWGS7GThjMvWo6CgwGvfOWvVqlUMHTo0ph61Ddn8G1UFfFW4l5TUDPjBg+HYY8NJWlXhfthhmX1anmQfM1vm7gWNLad/9tKmbNtWdw9+zZrq96sC/rLLoKAAjjkmHLQUkUChn0bLly/nkksuqTGvc+fOvPDCCzH1qG2pCvjkPfjkgB80KAT7pZeGoD/2WAW8SGMU+ml01FFH8XLUF5JlqO3bqwO+ai/+jTeq3x80KIT6V79avQfft29s3RVpsxT60uK2b4eXXqo5RPP669XvDxwYAn7q1Oo9eAW8SDQU+pJWu3fDP/5Rc4imvoC/5JLqPfh+/eLrr0imU+hL5MrLw1WiDz4If/pTuPgJIDe3OuCr9uAV8CItS6Evkdi7F557LgT9ww+HKz8POgi+/GU491w47rhwMZCIxEuhL/vNPQzZPPggPPQQvPtuuDJ04kSYMiVUVezcOe5eikgyXYDdBOeeey7HHnssw4cPp7CwEIDHH3+cY445hlGjRjFu3DgglE6+9NJLOeqooxg5ciR/+MMf4ux25FatghtvDPVgjjsOfvGLMBb/wAOwcWPYCEycqMAXaY3a3J5+TOX0Abj77rvp1asXu3fv5rjjjmPSpElMmzaNZ599lvz8/E9LId9yyy306NGD5cuXA7Cldj3aNujtt2Hu3BDor7wSinCdeip85ztw/vmh2qKItH4phb6ZTQB+BrQH7nT3H9Z6fzDhDll9gc3Axe5emnivElieWPQdd58YUd9b3M9//nPmz58PwPr16yksLORzn/sc+fn5QHUp5CeffJK5c+d+ul7Pnj3rNtYGfPAB/P73Ieiffz7MO/74sIG88MJQrEtE2pZU7pHbHrgDOAMoBZaaWbG7r0xa7HbgPne/18xOA24Dqi5F3e3uR0fV4ZjK6fP000/z5JNPsnjxYrp06cLYsWMZNWoUq1evrrNsWy6RvG0b/PGPIej/+tdwgHbECLj1Vpg8ORQkE5G2K5Ux/THAGndf6+57gLlA7XsCDgP+mni+qJ7327xt27bRs2dPunTpwmuvvcaSJUv45JNPeOaZZ1i3bh3Ap8M748eP55e//OWn67b24Z3du8Me/XnnhVMoL7sslDu49lpYvjxM11+vwBfJBKmE/gAg6XYSlCbmJXsF+GLi+XlANzPrnXidY2YlZrbEzM5tVm9jNGHCBCoqKhg5ciTf//73OeGEE+jbty+FhYWcf/75jBo1ii9/+csA3HDDDWzZsoURI0YwatQoFi1aFHPv6yovhz//GS6+OAT9hRfCkiXw7/8eHt98M+zd7+vOTiLS9qQypl/fOEXteszfBn5pZl8FngXeBSoS7w1y9w1mdijwlJktd/c3k1c2s+nAdIBBrbTQd+fOnXnsscfqfe+ss86q8bpr167ce++9LdGtJtm7F559tvpc+s2boWfPMGwzZUq4x2km15IXkdRCvxQYmPQ6F9iQvIC7bwDOBzCzrsAX3X1b0nu4+1ozexoYDbxZa/1CoBBCPf39+SJSv+Rz6efODfda7dIFJk2qPpe+U6e4eykiLSWV0F8KDDGzfMIe/GTgK8kLmFkfYLO77wWuI5zJg5n1BD5y908Sy5wM/CjC/ksDtm2DH/84hP2aNeEm2WedFYL+nHPgwAPj7qGIxKHR0Hf3CjO7CniCcMrm3e6+wsxmAiXuXgyMBW4zMycM71yZWH0oMMfM9hKOH/yw1lk/KWvLZ8SkW313P7vyynCx1GmnhQOy558fhnJEJLu1idslrlu3jm7dutG7d28Ffy3uzocffsiOHTs+vV5g6VIYMwauuw7++79j7qCItIiMul1ibm4upaWllJWVxd2VViknJ4fc3FwgjOF/85vhjJxrr425YyLS6rSJ0O/YseOne7Gyb/Pnw9/+BrNmQffucfdGRFobFVzLIHv2wHe/C8OGwb/9W9y9EZHWqE3s6UtqfvWrcKbOggXQIZv+y+7ZAzt2hLu17OuxS5dwq65Bg8Jjnz6hcpxIFsmmaMhomzfDzJlwxhkwYULcvdkHd/jooxDCqQR1Ko979uxfX3Jywu28qjYCyRuEqkljZJJhFPoZ4pZbYOtWuP32mHZe9+6F99+Hdetg7dqaj++/Xx3QO3eG4E9F587QtSt061b92K0bHHJIzXmpPHbtCrt2wfr18M474bFqeuedUF1uw4bwPZL16FFzI1B7A5GbqxsHSJui0M8Aa9bAHXeEQmkjR6bxg7Zvrz/U166Ft96Cjz+uufyAAZCfH25Y0L174+Fce17HjtH2/8ADw2lNxx5b//sVFSH4a28Qqp4vXQqbNtVdr1+/+jcIVc/791d9C2k1FPoZ4LvfDaUUbrmlmQ2Vl4eQqy/U160LN75N1r17KL05bBh8/vPheX5+eBw8OAyftCUdOoSw3lf9p927obS0/r8WVq8Od4SvuhN8lfbtwwawaiMwYEDYENSeunfXMYa2qLIy7PB8/HH491H7eX3zGno+aBB873tp7a5Cv4177rlQ/37mzBRuauIe7mfYUKivX19zeKNjxxDehx4a9o6TQz0/P1zim20hdcABMGRImOrjHmpgNPTXwj/+Ef6aqP1XUVXbyRuBQw6pf+PQu3dm/u6VleGvrdpTeXnz5ze2bHl508I5eV55efO+d05O9TRmTDS/5T60iStypX5798IJJ4QMeX1FOV0+2gRlZdVT7TH2devCQdRk/fvXDPLk5wMGaFgiHao2DO+91/C0YUN43LGj7vodO8LBBze+cejXL/r/fu4h6KoOpKdysH1f7+3aVR3AcWZR+/Zho5uTU/exoeepztvX+506QbtozpzPqCtys9Lu3TUDvPa0aRMPrhzN0jdu4p4u/06Xg2bX307XriHEhwyB8eNr7q3n5YV/eNKyzOCgg8I0dOi+l921a98bhzVrwp97iRv41NCuXQj++v566Nev8VNdG3qvsjK179mhQ/3Hbvr2rT6G06VLCL4OHaqnjh1rvo5yfn3z2rePLHjbAu3ptwT38D9MIyFe4/WuXfW31aED9OnD7t65HLHmUfoc8BElF/2Edv36hP+Zkqd+/TJ3KEBq+uST8JddY385bNzY8B71AQc0fnC9Ke916qR/ey1Ie/px2bwZvv3tcLAvOcQbOpc8J6dmUB9xRN3wTp569AAzfnobrL8e7n0M2p3685b9jtL6dO4cjr8MHrzv5SoqQvBv3BjWqQroAw/Msiv6spf+K0dt1iz4zW/g+OPDOdyjR+87xPejsP3GjXDbbTBxIpx6ahq+g2SuDh3CEM8hh8TdE4mJQj9KlZVQWAinnx5O3UuTm24KQ/4/0u1oRKSJsufoRUt4/PFwet4VV6TtI1asCNuVK64II0EiIk2h0I/S7NnhVLqJE9P2Ef/5n2EI9qab0vYRIpLBFPpReeedUN7y8sujLx+QsHAhPPYY3HBDKBApItJUKYW+mU0ws9VmtsbM6tyPycwGm9lfzexVM3vazHKT3ptqZm8kpqlRdr5VufPOcCrctGlpab6yEr71rXCK/dVXp+UjRCQLNHog18zaA3cAZwClwFIzK651g/Pbgfvc/V4zOw24DbjEzHoBNwEFgAPLEutuifqLxKq8PIT+WWc1fsrcfrrnHli+HB56SEUdRWT/pbKnPwZY4+5r3X0PMBeYVGuZYcBfE88XJb1/JrDQ3Tcngn4h0Jqrve+fRx8NF76k6QDuzp1hSOfEE+FLX0rLR4hIlkgl9AcA65NelybmJXsF+GLi+XlANzPrneK6mNl0Mysxs5I2efPz2bND9cSzz05L8z/6UbjY8v/+Txc4ikjzpBL69cVM7eu4vw2cYmYvAacA7wIVKa6Luxe6e4G7F/Tt2zeFLrUib74Jf/lLGMtPQ3Gy0tJwY5QvfzkUVxMRaY5ULs4qBQYmvc4FNiQv4O4bgPMBzKwr8EV332ZmpcDYWus+3Yz+tj6FhSHsL788Lc3fcEM4iHvbbWlpXkSyTCp7+kuBIWaWb2adgMlAcfICZtbHzKraug64O/H8CWC8mfU0s57A+MS8zPDJJ6HkwsSJabms/cUX4b774BvfCGftiIg0V6Oh7+4VwFWEsF4FzHP3FWY208yqrkIaC6w2s9eBzwC3JtbdDNxC2HAsBWYm5mWG+fNDMbU0HMB1D6do9u4N118fefMikqVUWrk5xo4Nd0N6443I63EXF8OkSfDLX8KVV0batIhkoFRLK+uK3P21ahU88wxMnx554JeXh3ILRxwRmhcRiYqqbO6vwsJQbuHSSyNves4ceP31sLefpooOIpKltKe/P3bvDpfIfvGL4e5UEdq6FW6+OdTJ/8IXIm1aREShv1/mzQvp/LWvRd70rbeGm2/9+Me6EEtEoqfQ3x9z5oQB91NOibTZdevg5z+HqVPDDbdERKKm0G+qV16BxYvDaZoR74pfe224m90PfhBpsyIin1LoN9WcOeFm5v/6r5E2u3hxGDX69rdhQJ3qRCIi0VDoN8XOnfDb38KFF0KvXpE16w7f/Cb07x9O1RQRSRedstkUDz4IO3ZEfgXuvHmwZAncdRd07Rpp0yIiNeiK3FS5w7HHhupnL78c2Xj+xx/D0KHQvXuotZOGQp0ikgVSvSJXe/qpKimBl16CX/0q0gO4v/gFvPVWuP+tAl9E0k1j+qmaPRsOPBAuuiiyJjdtCufln302nH56ZM2KiDRIoZ+KrVth7lz4ylfCOExE/uu/wrHh//3fyJoUEdknhX4qfvtb+OijSK/Afe01mDUrFFQbNiyyZkVE9kmh3xj3MLRTUBAO5EbkO9+BLl1CnR0RkZaiA7mN+fvfYcUKuPPOyJpctAgeeSTcAjHiem0iIvukPf3GzJkTxvEnT46kub17wx2xBg+Ga66JpEkRkZSlFPpmNsHMVpvZGjO7tp73B5nZIjN7ycxeNbOzE/PzzGy3mb2cmGZH/QXSatMm+P3vQ8mFAw+MpMn77w9nft52W6jmICLSkhod3jGz9sAdwBlAKbDUzIrdfWXSYjcQ7p07y8yGAQuAvMR7b7r70dF2u4Xce2+4+XlEB3B37Qr3ux0zJrI/HEREmiSVMf0xwBp3XwtgZnOBSUBy6DtQdS5jD2BDlJ2MhXsY2jn5ZBgxIpImf/xj2LAhlF1QrXwRiUMqwzsDgPVJr0sT85LdDFxsZqWEvfyrk97LTwz7PGNmn63vA8xsupmVmFlJWVlZ6r1Pp0WLwg3PI6qz89578KMfhZttnXxyJE2KiDRZKqFf3z5p7YI9U4B73D0XOBu438zaAe8Bg9x9NPBN4AEzq3N1k7sXunuBuxf07du3ad8gXWbPDpU0L7ggkua+/33Yswf+538iaU5EZL+kEvqlwMCk17nUHb65HJgH4O6LgRygj7t/4u4fJuYvA94EDm9up9Pu/fdh/nz46lcjOdr6yitw991w9dVw2GHN756IyP5KJfSXAkPMLN/MOgGTgeJay7wDjAMws6GE0C8zs76JA8GY2aHAEGBtVJ1Pm9/8BioqwuWyzeQebozSsyfccEMEfRMRaYZGD+S6e4WZXQU8AbQH7nb3FWY2Eyhx92LgW8CvzWwGYejnq+7uZvY5YKaZVQCVwBXuvjlt3yYKlZVQWAinnRbug9tMjz0GTz4JP/1pCH4RkTipnn5tjz0Wyl4+9FC4Q1YzVFTAyJHh8Z//hE6dIuqjiEgtqqe/v2bPDrURzj232U3deSesWhUODyjwRaQ1UBmGZKWl8OijcPnlzU7p7dvhxhvhc5+DSZMi6p+ISDNpTz/ZnXeGI6/TpjW7qdtug7IyWLBAF2KJSOuhPf0qFRXw61/DmWdCfn6zmnr7bfjJT+CSS0JFZhGR1kKhX+XPfw41EiK4Avf668Pe/a23RtAvEZEIKfSrzJ4NAwbA5z/frGZefRUeeCCUTx44sPHlRURakkIfYO1aeOKJMJbfoXmHOebNg3btYMaMiPomIhIhhT6EsXyzcNZOMxUXw2c/C717R9AvEZGIKfT37AmFcc45B3Jzm9XUunWwfLlO0RSR1kuh/6c/wcaNkRzALSoKjxMnNrspEZG0UOjPng15eTB+fLObKi6G4cNVSVNEWq/sDv3Vq8PNUqZPD0dfm2HzZnj2WQ3tiEjrlt2hX1gYzta57LJmN/XYY6FAp4Z2RKQ1y97Q370b7rkHzj8fPvOZZjdXVAT9+8NxxzW/ayIi6ZK9of/ww2FM5mtfa3ZTn3wS9vTPOafZo0QiImmVvRE1ezYcfjicemqzm3r6adi5U0M7ItL6ZWfoL18Ozz8f9vIjKIFZVARdusC4cRH0TUQkjVIKfTObYGarzWyNmV1bz/uDzGyRmb1kZq+a2dlJ712XWG+1mZ0ZZef325w50LkzTJ3a7Kbcw6maZ54ZyT3URUTSqtFCM4kbm98BnAGUAkvNrNjdVyYtdgMwz91nmdkwYAGQl3g+GRgOHAI8aWaHu3tl1F8kZbt2wf33w5e+FEmthBdfhHff1amaItI2pLKnPwZY4+5r3X0PMBeoHXEOdE887wFsSDyfBMx190/cfR2wJtFefObODbe1iuAKXAhDO+3aNbs4p4hIi0gl9AcA65NelybmJbsZuNjMSgl7+Vc3YV3MbLqZlZhZSVlZWYpd30+zZ8OIEXDSSZE0V1wMJ58MffpE0pyISFqlEvr1Hen0Wq+nAPe4ey5wNnC/mbVLcV3cvdDdC9y9oG/fvil0aT+VlIQpogO4b70Fr7yioR0RaTtSKR5fCiTfDiSX6uGbKpcDEwDcfbGZ5QB9Uly35cyZE06zueSSSJorLg6POlVTRNqKVPb0lwJDzCzfzDoRDswW11rmHWAcgJkNBXKAssRyk82ss5nlA0OAf0TV+SbZtg0efBCmTIEePSJpsrgYhg6FIUMiaU5EJO0aDX13rwCuAp4AVhHO0llhZjPNrGof91vANDN7BXgQ+KoHK4B5wErgceDK2M7c+d3vwpk7ER3A3boVnnlGQzsi0raYe50h9lgVFBR4SUlJtI26w6hR0LEjLFsWSZMPPAAXXRSu8TrxxEiaFBHZb2a2zN0LGluueTeEbSsWLw5X4RYWRtZkcXGo03b88ZE1KSKSdtlRhmHOHOjWLYznR2DPHhVYE5G2KfMja/NmeOghuPhi6No1kiafeSZc36WzdkSkrcn80L/33lD7OIISylWqCqydfnpkTYqItIjMDn33MLRz4onhQG5ETRYXh1vqHnBAJE2KiLSYzA79Z54J98GN6DRNgJdfhvXrNbQjIm1TZof+7NnQs2eoqBmRoqJQweELX4isSRGRFpO5ob9xI/zxj6FmfoTjMEVFoVZbOksEiYikS+aG/m9+A+XlkR7AfeedMLyjq3BFpK3KzNDfuzccwB07Fo48MrJmqwqsKfRFpK3KzNBfuBDWrYt0Lx9C6B9xRLifuohIW5SZoT97dhh0P++8yJrctg2eflp7+SLStmVe6L/7LjzyCFx2Wbj5eUQeeywcIlDoi0hblnmhf9ddUFkJ06ZF2mxxcfjjQQXWRKQty6zQr6iAX/86XC572GGRNVteDgsWhAJr7dtH1qyISIvLrNBfsABKSyO9AhfChb3btukqXBFp+zIr9OfMgUMOifxy2eLicH3XGWdE2qyISItLKfTNbIKZrTazNWZ2bT3v/8TMXk5Mr5vZ1qT3KpPeq31v3ei89VY42nr55eEOWRFxD1fhnnFGqKwpItKWNXrnLDNrD9wBnAGUAkvNrNjdV1Yt4+4zkpa/Ghid1MRudz86ui43YMAA+MMfYMyYSJt99dVwJe6NN0barIhILFLZ0x8DrHH3te6+B5gL7OvExSmEm6O3rI4dw3n5AwZE2qwKrIlIJkkl9AcA65Nelybm1WFmg4F84Kmk2TlmVmJmS8zs3P3uaUyKikI5/s98Ju6eiIg0Xyqhb/XM8waWnQw87O6VSfMGJe7Q/hXgp2ZW51xKM5ue2DCUlJWVpdClllFaCi++qLN2RCRzpBL6pcDApNe5wIYGlp1MraEdd9+QeFwLPE3N8f6qZQrdvcDdC/q2oprFKrAmIpkmldBfCgwxs3wz60QI9jpn4ZjZEUBPYHHSvJ5m1jnxvA9wMrCy9rqtVVERDBkSiqyJiGSCRkPf3SuAq4AngFXAPHdfYWYzzSx54GMKMNfdk4d+hgIlZvYKsAj4YfJZP63Z9u2waFHYy7f6BrhERNqgRk/ZBHD3BcCCWvNurPX65nrWex44qhn9i83jj6vAmohknsy6IjdCxcXQp084c0dEJFMo9OtRXg5//nM4N18F1kQkkyj06/Hcc7B1q4Z2RCTzKPTrUVwMOTkqsCYimUehX0tVgbXTT4cDD4y7NyIi0VLo17J8eSjYqaEdEclECv1aiotVYE1EMpdCv5aionAf3IMPjrsnIiLRU+gnefddKClRgTURyVwK/SSPPBIeNZ4vIplKoZ+kqAj+5V9g6NC4eyIikh4K/YQdO+Cpp8LQjgqsiUimUugnPPEE7NmjoR0RyWwK/YSiIujdG046Ke6eiIikj0IfqKgIBdY+/3nokFKxaRGRtkmhD/ztb7DhOZd9AAAJn0lEQVRli4Z2RCTzKfQJQzudO8P48XH3REQkvVIKfTObYGarzWyNmV1bz/s/MbOXE9PrZrY16b2pZvZGYpoaZeejUFVgbdw46No17t6IiKRXoyPYZtYeuAM4AygFlppZcfK9bt19RtLyVwOjE897ATcBBYADyxLrbon0WzTDihWwbh1cW2dTJiKSeVLZ0x8DrHH3te6+B5gL7Gv0ewrwYOL5mcBCd9+cCPqFwITmdDhqxcXhUQXWRCQbpBL6A4D1Sa9LE/PqMLPBQD7wVFPXjUtREYwZA4ccEndPRETSL5XQr+/6VG9g2cnAw+5e2ZR1zWy6mZWYWUlZWVkKXYrGhg3wj3/orB0RyR6phH4pMDDpdS6woYFlJ1M9tJPyuu5e6O4F7l7Qt2/fFLoUjUcfDY+qqiki2SKV0F8KDDGzfDPrRAj24toLmdkRQE9gcdLsJ4DxZtbTzHoC4xPzWoWiIjj0UBg+PO6eiIi0jEZD390rgKsIYb0KmOfuK8xsppkl7yNPAea6uyetuxm4hbDhWArMTMyL3c6d8Ne/qsCaiGSXlIoOuPsCYEGteTfWen1zA+veDdy9n/1Lm7/8BT75ROP5IpJdsvaK3KIi6NkT/t//i7snIiItJytDXwXWRCRbZWXoP/88fPihhnZEJPtkZegXFUGnTnDmmXH3RESkZWVd6FcVWDvtNOjWLe7eiIi0rKwL/VWr4M03NbQjItkp60K/qCg8nnNOvP0QEYlD1oV+cTEUFMCAVlX2TUSkZWRV6L//PrzwgoZ2RCR7ZVXoP/poOJCrAmsikq2yKvSLiiAvD446Ku6eiIjEI2tCf9cuePLJMLSjAmsikq2yJvQXLoSPP9bQjohkt6wJ/aIiOOgg+Oxn4+6JiEh8siL0KyvDQdyzz4aOHePujYhIfLIi9Bcvhk2bdKqmiEhWhH5RUdjDnzAh7p6IiMQrpdA3swlmttrM1pjZtQ0sc6GZrTSzFWb2QNL8SjN7OTHVubduSyguhlNPhe7d4/h0EZHWo9FbiJhZe+AO4AygFFhqZsXuvjJpmSHAdcDJ7r7FzPolNbHb3Y+OuN8pe+01eP11+MY34uqBiEjrkcqe/hhgjbuvdfc9wFyg9uj4NOAOd98C4O4bo+3m/qsqsKZTNUVEUgv9AcD6pNeliXnJDgcON7O/m9kSM0sePc8xs5LE/HOb2d8mKy6GY46B3NyW/mQRkdYnlTvE1nf9qtfTzhBgLJALPGdmI9x9KzDI3TeY2aHAU2a23N3frPEBZtOB6QCDBg1q4ldo2AcfhDN3br45siZFRNq0VPb0S4GBSa9zgQ31LFPk7uXuvg5YTdgI4O4bEo9rgaeB0bU/wN0L3b3A3Qv69u3b5C/RkKoCazpVU0QkSCX0lwJDzCzfzDoBk4HaZ+H8CTgVwMz6EIZ71ppZTzPrnDT/ZGAlLaS4GAYPhpEjW+oTRURat0ZD390rgKuAJ4BVwDx3X2FmM82s6vDoE8CHZrYSWAT8p7t/CAwFSszslcT8Hyaf9ZNOH30U6u1MnKgCayIiVVIZ08fdFwALas27Mem5A99MTMnLPA/EUsj4ySdh926dtSMikixjr8gtKoIePeCUU+LuiYhI65GRoV9ZCY88ogJrIiK1ZWTov/AClJVpaEdEpLaMDP2qAmtnnRV3T0REWpeMDf2xY8OYvoiIVMu40F+9Okwa2hERqSvjQr84cdmYQl9EpK6MDP2jj4YIS/iIiGSMjAr9sjJ4/nnV2hERaUhGhf6jj8LevQp9EZGGZFToFxfDwIFheEdEROrKmNDfvRv+8hcVWBMR2ZeMCf2tW8Owzpe+FHdPRERar5SqbLYF/fvDAw/E3QsRkdYtY/b0RUSkcQp9EZEsotAXEckiKYW+mU0ws9VmtsbMrm1gmQvNbKWZrTCzB5LmTzWzNxLT1Kg6LiIiTdfogVwzaw/cAZwBlAJLzaw4+V63ZjYEuA442d23mFm/xPxewE1AAeDAssS6W6L/KiIi0phU9vTHAGvcfa277wHmArWveZ0G3FEV5u6+MTH/TGChu29OvLcQmBBN10VEpKlSCf0BwPqk16WJeckOBw43s7+b2RIzm9CEdUVEpIWkcp5+fde3ej3tDAHGArnAc2Y2IsV1MbPpwHSAQSqPKSKSNqmEfikwMOl1LrChnmWWuHs5sM7MVhM2AqWEDUHyuk/X/gB3LwQKAcyszMzeTrH/9ekDbGrG+plEv0VN+j1q0u9RLRN+i8GpLGTudXa8ay5g1gF4HRgHvAssBb7i7iuSlpkATHH3qWbWB3gJOJrEwVvgmMSiLwLHuvvmpn2X1JlZibsXpKv9tkS/RU36PWrS71Etm36LRvf03b3CzK4CngDaA3e7+wozmwmUuHtx4r3xZrYSqAT+090/BDCzWwgbCoCZ6Qx8ERHZt0b39NuabNpiN0a/RU36PWrS71Etm36LTLwitzDuDrQi+i1q0u9Rk36PalnzW2Tcnr6IiDQsE/f0RUSkARkT+qnUB8oWZjbQzBaZ2apELaRvxN2nuJlZezN7ycwejbsvcTOzg8zsYTN7LfFv5MS4+xQnM5uR+P/kn2b2oJnlxN2ndMqI0E+qD3QWMAyYYmbD4u1VrCqAb7n7UOAE4Mos/z0AvgGsirsTrcTPgMfd/UhgFFn8u5jZAODrQIG7jyCcoTg53l6lV0aEPqnVB8oa7v6eu7+YeL6D8D911pa/MLNc4PPAnXH3JW5m1h34HHAXgLvvcfet8fYqdh2AAxLXJHWh7sWnGSVTQl81fhpgZnnAaOCFeHsSq58C3wH2xt2RVuBQoAz4TWK4604zOzDuTsXF3d8FbgfeAd4Dtrn7X+LtVXplSuinVOMn25hZV+APwDXuvj3u/sTBzL4AbHT3ZXH3pZXoQLhCfpa7jwZ2AVl7DMzMehJGBfKBQ4ADzezieHuVXpkS+qnUB8oqZtaREPi/c/c/xt2fGJ0MTDSztwjDfqeZ2W/j7VKsSoFSd6/6y+9hqsukZKPTgXXuXpaoHfZH4KSY+5RWmRL6S4EhZpZvZp0IB2KKY+5TbMzMCGO2q9z9/+LuT5zc/Tp3z3X3PMK/i6fcPaP35PbF3d8H1pvZEYlZ44CV+1gl070DnGBmXRL/34wjww9sp1Jls9VrqD5QzN2K08nAJcByM3s5Me96d18QY5+k9bga+F1iB2ktcGnM/YmNu79gZg8TikFWEIpFZvTVuboiV0Qki2TK8I6IiKRAoS8ikkUU+iIiWUShLyKSRRT6IiJZRKEvIpJFFPoiIllEoS8ikkX+Py9nWf3lYxckAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_acc'), c='r', label='val_acc')\n",
    "plt.plot(history.epoch, history.history.get('acc'), c='b', label='acc')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2971775ca58>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_loss'), c='r', label='val_loss')\n",
    "plt.plot(history.epoch, history.history.get('loss'), c='b', label='loss')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用循环 dropout 抑制过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对每一个时间步使用相同的 dropout 掩码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model():\n",
    "    model = keras.Sequential()\n",
    "    model.add(layers.Embedding(max_word, 16, input_length=maxlen))\n",
    "    model.add(layers.LSTM(64,\n",
    "                         dropout=0.2,\n",
    "                         recurrent_dropout=0.5))\n",
    "    model.add(layers.Dropout(0.5))\n",
    "    model.add(layers.Dense(1, activation='sigmoid'))\n",
    "    model.compile(optimizer=keras.optimizers.RMSprop(),\n",
    "              loss='binary_crossentropy',\n",
    "              metrics=['acc'])\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "model2 = train_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\guanghua\\anaconda3\\envs\\tensor\\lib\\site-packages\\tensorflow\\python\\ops\\gradients_impl.py:112: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
      "  \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 3780 samples, validate on 946 samples\n",
      "Epoch 1/10\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.6707 - acc: 0.6328 - val_loss: 0.6191 - val_acc: 0.7040\n",
      "Epoch 2/10\n",
      "3780/3780 [==============================] - 3s 745us/step - loss: 0.5590 - acc: 0.7270 - val_loss: 0.4686 - val_acc: 0.7770\n",
      "Epoch 3/10\n",
      "3780/3780 [==============================] - 3s 738us/step - loss: 0.4217 - acc: 0.8323 - val_loss: 0.3140 - val_acc: 0.8975\n",
      "Epoch 4/10\n",
      "3780/3780 [==============================] - 3s 735us/step - loss: 0.3101 - acc: 0.8931 - val_loss: 0.2416 - val_acc: 0.9154\n",
      "Epoch 5/10\n",
      "3780/3780 [==============================] - 3s 741us/step - loss: 0.2433 - acc: 0.9188 - val_loss: 0.2437 - val_acc: 0.8996\n",
      "Epoch 6/10\n",
      "3780/3780 [==============================] - 3s 749us/step - loss: 0.2028 - acc: 0.9354 - val_loss: 0.1999 - val_acc: 0.9165\n",
      "Epoch 7/10\n",
      "3780/3780 [==============================] - 3s 746us/step - loss: 0.1621 - acc: 0.9481 - val_loss: 0.1903 - val_acc: 0.9260\n",
      "Epoch 8/10\n",
      "3780/3780 [==============================] - 3s 750us/step - loss: 0.1568 - acc: 0.9471 - val_loss: 0.2043 - val_acc: 0.9281\n",
      "Epoch 9/10\n",
      "3780/3780 [==============================] - 3s 758us/step - loss: 0.1318 - acc: 0.9608 - val_loss: 0.1826 - val_acc: 0.9292\n",
      "Epoch 10/10\n",
      "3780/3780 [==============================] - 3s 747us/step - loss: 0.1214 - acc: 0.9619 - val_loss: 0.1945 - val_acc: 0.9292\n"
     ]
    }
   ],
   "source": [
    "history = model2.fit(data_ok, data.review.values, epochs=10, batch_size=128, validation_split=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x29fc59ba9b0>"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zz3HmWeeSdOmTWnbti21atVi7NixdOvWjZycHGrXrs2MGTO477776NOnD6effjopKSk8+OCDdOvWLei34PLZtcv65HO7bXJruLdqBfffb635Vq3icM785s0Ht9xXrIBNm/KOqVYtL7k3awann24/a9cOLm4XF7z2ToLwzygyP/yQ15r/4ANL/BUrQufO1pq/+GKbhRMXtm8vuOWeW3we7E+P8KSee6tTx1vjScZr7zgXsnkzjB0L//yn1ZoHaNTIplleeqnVck9NDTDAHTtg5cqDW+4//JB3TMWKlszT0/MS++mnQ716ntxdkXjSdwnr22/hqadg/HibQNKhAwwbZt02p50WQK7MHThYsuTA1nv4NpupqTYt6LzzDmzBN2wYh/1MriwqM0nfZ8QcWrx10f3Pd9/BW2/Bli02CtquXans4rFwIQwfDpMm2Yy+666DAQMsf5a63bth5kx4+23rU1ob2m66XDnbJqp9e+jZM6/1fsIJFrRzMVImkn5qaiqbN2+mRo0anvjzUVU2b95MaqD9E2G++MKWqE6ZYjUJwFqoQ4bYCqbf/Ma6KC68EOrXj9plc3JsiuWTT9rm2pUrw8CBcNttULdu1C4TmfXrrejO229b0Z2dO6175oILYPBgS/QnneTbWLlAlIn/6+rVq0dmZiZZWVlBhxKXUlNTqVfvoC2JS4eqJfcpUyzZ565catsWnngCrrgCatWCDz+EadMsM+eWpcjto05Ph1//uli7gOzZA6++Cn/9q3WL169v9//4R0v8pULV6i28/bbdPv3UHq9fH264wQYOzjsv4IED50yZmL3j4sz+/VYfeMoUu33/vXVJdOxoSb5r10M3r1Xtr4HcL4A5c2DvXmsJn3de3pdAISsTt26FMWNg1Chbe9S8ubXsr766lFbG5tZKzu22yZ3v2aYNXHaZ3c480wdZXamJdPaOJ30XmT174KOPrDX/r39BVpa1zC+80BL9ZZfZSsyi2rnTkue0aXZbvdoeP/FES/4XXWRfJkcfDdgwwYgRMG6cbUTSuTPccYf1GsU8v27YYPM983fbdO5s7/+SS2wfQ+cC4EnfldzPP1sinjzZWrM7dti88EsusWWqF10U/S2dVq+2ugfTptmXzC+/QLlyLGlxE0/uu503lp2CCHTvLgwcaC38mFGF5csP7LZRtWmSua1577ZxccLn6bvi2bLF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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_acc'), c='r', label='val_acc')\n",
    "plt.plot(history.epoch, history.history.get('acc'), c='b', label='acc')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x29fc79c5550>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_loss'), c='r', label='val_loss')\n",
    "plt.plot(history.epoch, history.history.get('loss'), c='b', label='loss')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用双向 RNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model():\n",
    "    model = keras.Sequential()\n",
    "    model.add(layers.Embedding(max_word, 16, input_length=maxlen))\n",
    "    model.add(layers.Bidirectional(layers.LSTM(64,\n",
    "                         dropout=0.2,\n",
    "                         recurrent_dropout=0.5)))\n",
    "    model.add(layers.Dropout(0.5))\n",
    "    model.add(layers.Dense(1, activation='sigmoid'))\n",
    "    model.compile(optimizer=keras.optimizers.RMSprop(),\n",
    "              loss='binary_crossentropy',\n",
    "              metrics=['acc'])\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "model3 = train_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "learning_rate_reduction = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', patience=3, factor=0.3, min_lr=0.00001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 3780 samples, validate on 946 samples\n",
      "Epoch 1/30\n",
      "3780/3780 [==============================] - 9s 2ms/step - loss: 0.6723 - acc: 0.6241 - val_loss: 0.6143 - val_acc: 0.6998\n",
      "Epoch 2/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.4755 - acc: 0.7907 - val_loss: 0.3641 - val_acc: 0.8340\n",
      "Epoch 3/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.3558 - acc: 0.8571 - val_loss: 0.2826 - val_acc: 0.8795\n",
      "Epoch 4/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.2713 - acc: 0.9026 - val_loss: 0.3160 - val_acc: 0.8742\n",
      "Epoch 5/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.2132 - acc: 0.9204 - val_loss: 0.2819 - val_acc: 0.8943\n",
      "Epoch 6/30\n",
      "3780/3780 [==============================] - 6s 2ms/step - loss: 0.1874 - acc: 0.9352 - val_loss: 0.2496 - val_acc: 0.9080\n",
      "Epoch 7/30\n",
      "3780/3780 [==============================] - 8s 2ms/step - loss: 0.1731 - acc: 0.9426 - val_loss: 0.2343 - val_acc: 0.9091\n",
      "Epoch 8/30\n",
      "3780/3780 [==============================] - 10s 3ms/step - loss: 0.1432 - acc: 0.9497 - val_loss: 0.2471 - val_acc: 0.9154\n",
      "Epoch 9/30\n",
      "3780/3780 [==============================] - 9s 2ms/step - loss: 0.1274 - acc: 0.9577 - val_loss: 0.2578 - val_acc: 0.9186\n",
      "Epoch 10/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.1074 - acc: 0.9677 - val_loss: 0.2756 - val_acc: 0.9154\n",
      "Epoch 11/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0903 - acc: 0.9698 - val_loss: 0.2755 - val_acc: 0.9101\n",
      "Epoch 12/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0816 - acc: 0.9717 - val_loss: 0.2665 - val_acc: 0.9144\n",
      "Epoch 13/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.0787 - acc: 0.9749 - val_loss: 0.2768 - val_acc: 0.9101\n",
      "Epoch 14/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.0803 - acc: 0.9728 - val_loss: 0.2820 - val_acc: 0.9123\n",
      "Epoch 15/30\n",
      "3780/3780 [==============================] - 6s 2ms/step - loss: 0.0746 - acc: 0.9778 - val_loss: 0.2832 - val_acc: 0.9133\n",
      "Epoch 16/30\n",
      "3780/3780 [==============================] - 8s 2ms/step - loss: 0.0801 - acc: 0.9767 - val_loss: 0.2823 - val_acc: 0.9133\n",
      "Epoch 17/30\n",
      "3780/3780 [==============================] - 9s 2ms/step - loss: 0.0718 - acc: 0.9767 - val_loss: 0.2830 - val_acc: 0.9144\n",
      "Epoch 18/30\n",
      "3780/3780 [==============================] - 8s 2ms/step - loss: 0.0701 - acc: 0.9794 - val_loss: 0.2830 - val_acc: 0.9165\n",
      "Epoch 19/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0789 - acc: 0.9743 - val_loss: 0.2831 - val_acc: 0.9165\n",
      "Epoch 20/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0720 - acc: 0.9770 - val_loss: 0.2827 - val_acc: 0.9165\n",
      "Epoch 21/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0733 - acc: 0.9778 - val_loss: 0.2826 - val_acc: 0.9165\n",
      "Epoch 22/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.0777 - acc: 0.9754 - val_loss: 0.2827 - val_acc: 0.9175\n",
      "Epoch 23/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.0719 - acc: 0.9767 - val_loss: 0.2835 - val_acc: 0.9165\n",
      "Epoch 24/30\n",
      "3780/3780 [==============================] - 6s 2ms/step - loss: 0.0653 - acc: 0.9812 - val_loss: 0.2833 - val_acc: 0.9165\n",
      "Epoch 25/30\n",
      "3780/3780 [==============================] - 7s 2ms/step - loss: 0.0728 - acc: 0.9728 - val_loss: 0.2836 - val_acc: 0.9165\n",
      "Epoch 26/30\n",
      "3780/3780 [==============================] - 10s 3ms/step - loss: 0.0718 - acc: 0.9780 - val_loss: 0.2837 - val_acc: 0.9165\n",
      "Epoch 27/30\n",
      "3780/3780 [==============================] - 9s 2ms/step - loss: 0.0678 - acc: 0.9780 - val_loss: 0.2845 - val_acc: 0.9165\n",
      "Epoch 28/30\n",
      "3780/3780 [==============================] - 5s 1ms/step - loss: 0.0706 - acc: 0.9775 - val_loss: 0.2854 - val_acc: 0.9165\n",
      "Epoch 29/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0710 - acc: 0.9775 - val_loss: 0.2860 - val_acc: 0.9175\n",
      "Epoch 30/30\n",
      "3780/3780 [==============================] - 4s 1ms/step - loss: 0.0737 - acc: 0.9772 - val_loss: 0.2864 - val_acc: 0.9165\n"
     ]
    }
   ],
   "source": [
    "history = model3.fit(data_ok, \n",
    "                     data.review.values, \n",
    "                     epochs=30, \n",
    "                     batch_size=128, \n",
    "                     validation_split=0.2,\n",
    "                     callbacks=[learning_rate_reduction])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x28acdbf0da0>"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_acc'), c='r', label='val_acc')\n",
    "plt.plot(history.epoch, history.history.get('acc'), c='b', label='acc')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x28acdc5feb8>"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl4VOXd//H3NwubgCBEtrAERQGJRQ201oqKULVV3BW0VtFCW3+urTxifWop2qsW+mhry9NWW4tWLeDWUqGiVhTxUWSRfTOyGVAIKIgGJIT798c3MUOYJJMwyWQmn9d1nWtmzpyc+Z5M8pkz97nPfSyEgIiIpJa0RBcgIiLxp3AXEUlBCncRkRSkcBcRSUEKdxGRFKRwFxFJQQp3EZEUFFO4m9m5ZrbGzPLNbGyU5x80s8Wl01oz2xn/UkVEJFZW3UlMZpYOrAWGAgXAfGBECGFlJcvfDJwUQrg+zrWKiEiMMmJYZiCQH0JYB2BmU4ALgajhDowAflbdStu3bx969OgRY5kiIgKwcOHC7SGErOqWiyXcuwAfRDwuAL4abUEz6w7kAK9W8vxoYDRAt27dWLBgQQwvLyIiZcxsYyzLxdLmblHmVdaWMxx4JoRQEu3JEMLDIYS8EEJeVla1HzwiIlJLsYR7AdA14nE2sKWSZYcDfz/cokRE5PDEEu7zgV5mlmNmTfAAn15xITM7HmgLvBXfEkVEpKaqbXMPIew3s5uAWUA68GgIYYWZjQcWhBDKgn4EMCVoDGERqUJxcTEFBQXs3bs30aU0aM2aNSM7O5vMzMxa/Xy1XSHrSl5eXtABVZHGZ/369bRq1Yp27dphFu2QnoQQ2LFjB7t37yYnJ+eg58xsYQghr7p16AxVEalXe/fuVbBXw8xo167dYX27UbiLSL1TsFfvcH9HSRfub74Jd90FatkXEalc0oX7okVw//2wdWuiKxERabiSLtz79vXblZUNfiAiEkctW7as9LkNGzbQr1+/eqwmdgp3EZEUFMvYMg1Kx47Qpo3CXSQl3HYbLF4c33X27w+/+U2lT9955510796dG2+8EYBx48ZhZsyZM4dPPvmE4uJi7rvvPi688MIavezevXv54Q9/yIIFC8jIyOCBBx7grLPOYsWKFYwcOZJ9+/Zx4MABnn32WTp37swVV1xBQUEBJSUl/PSnP+XKK688rM2uKOnC3cz33hXuIlIbw4cP57bbbvsy3KdNm8aLL77I7bffTuvWrdm+fTtf+9rXGDZsWI16rEyaNAmAZcuWsXr1ar75zW+ydu1a/vjHP3Lrrbdy9dVXs2/fPkpKSpg5cyadO3dmxowZAOzatSvu25l04Q4e7v/8Z6KrEJHDVsUedl056aST2LZtG1u2bKGwsJC2bdvSqVMnbr/9dubMmUNaWhqbN29m69atdOzYMeb1zp07l5tvvhmA3r170717d9auXcupp57KL37xCwoKCrjkkkvo1asXubm53HHHHdx5552cf/75nH766XHfzqRrcwcP98JCn0REauqyyy7jmWeeYerUqQwfPpwnn3ySwsJCFi5cyOLFi+nQoUONTyCq7Gz/q666iunTp9O8eXPOOeccXn31VY477jgWLlxIbm4ud911F+PHj4/HZh0kKffc+/Tx21WrQCMHi0hNDR8+nFGjRrF9+3Zef/11pk2bxtFHH01mZiazZ89m48aYhkw/yKBBg3jyyScZPHgwa9euZdOmTRx//PGsW7eOnj17csstt7Bu3TqWLl1K7969Oeqoo/jOd75Dy5YtmTx5cty3MSnDPbLHzKBBia1FRJLPCSecwO7du+nSpQudOnXi6quv5oILLiAvL4/+/fvTu3fvGq/zxhtv5Ac/+AG5ublkZGQwefJkmjZtytSpU3niiSfIzMykY8eO3HPPPcyfP58xY8aQlpZGZmYmf/jDH+K+jUk5cFgI0Lo1jBwJDz0U58JEpE6tWrWKPmVfv6VK0X5XKT1wmJk3zajHjIhIdEnZLAPeNPPyy4muQkQag2XLlnHNNdccNK9p06bMmzcvQRVVL6nD/bHHYOdOP6lJRKSu5ObmsjjeJ1vVsaRsloHyg6qrViW2DhGRhijpw13t7iIih0racO/eHZo3V7iLiESTtOGeng69eyvcRaTmqhrGN1UkbbiDBhATEalM8oX7iy/CdddBCPTpA5s2we7diS5KRJJRCIExY8bQr18/cnNzmTp1KgAffvghgwYNon///vTr14833niDkpISrrvuui+XffDBBxNcfdWSrytkfr73gbz/fvr29RHbVq+GAQMSXJeI1FgChnM/yHPPPcfixYtZsmQJ27dvZ8CAAQwaNIinnnqKc845h7vvvpuSkhKKiopYvHgxmzdvZvny5QDs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TKecckpIRitXhpCeHsItt9TwB/ftC+Gyy3y/9oEH6qS2w7ZvXwi/+10I7duHYBbCd78bwqZN8X2NvXtDeOWVEMaMCeHEE/330b59CDfcEMILL4SwZ098X08kxeBd0KvNWO2518IPf+gjDqxc6S0NMSsu9iEKnn0WHnzQ+9Y3BCF4U8h//Re89563k0+c6Gfp1rWPP/a98wy1EIrEItY9dx2JqoVx47z789hDRravRmamX3n70ku9qeO3v62L8mK3d6+H+hlneDNIZqY3j7zySv0EO8BRRynYReqAwr0WOnTwJujnnoO5c2v4w2UBf8klvuf+0EN1UmOl9uzxg5ZXXeUHKC+6yNvE//Qn73L4rW+p66BIClCzTC0VFXmTTHY2vP12LfKwuBiGD/dPiIce8vFo6kpREcyc6Qd0X3jBx55v18731i+/3A9qHm5/dBGpF7E2y+j7cC21aAG/+IV3j5w2Da68soYryMyEKVP8B2+5xRvwx46F7t3jU+Dnn3sTy9NPe7AXFfme+ne+A5dd5l0R1RwikrK0534YSkrglFO85+Dq1X7Gco0VF3v7+8MP+4HNq67ykO/Tp+brCgEWLPB1/f3vHvAdOngT0OWX+8VJFOgiSU0HVOtBerqfsbphg5/fUyuZmf7D69Z508wzz8AJJ3ggz58f2zp27YI//MEPgg4c6GfGDh/ufco3b4b//V9velGwizQa2nOPg/PO83b3/Hxvyj4s27f7EMQPPeQjGw4Z4iNLnnnmwQ37IcA77/he+pQp3uzSvz98//u+96+Tf0RSkvbc69HEiX5y5X33xWFl7dvDz3/up/5PmOBXCBk8GE491bst7tzpe+L9+/tQxVOnepi/8w4sWgQ/+IGCXUS05x4vo0b5QJCrVvn1PuJm716YPNkHtdmwoXz415NO8r30ESMU5iKNSKx77gr3OPnwQzj2WB8WZdq0OniB/ft9L33JEr+CS171Q0uISOpRs0w969TJz95/+ml46606eIGMDL/e34QJCnYRqZbCPY7uuMND/sc/1vWxRSSxFO5xdMQRMH6877k/+2yiqxGRxkzhHmcjR0K/fj72zL59ia5GRBorhXucpad718h167zHoohIIijc68A55/jV4caNq/llR0VE4iGmcDezc81sjZnlm9kho5ib2Y/MbKWZLTWz/5hZnEa/Sk5mPoJux45+gulD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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.epoch, history.history.get('val_loss'), c='r', label='val_loss')\n",
    "plt.plot(history.epoch, history.history.get('loss'), c='b', label='loss')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
